/**
 * 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图，计算按此排列的柱子，下雨之后能接多少雨水。
 * @param {*} arr 
 * @returns 
 */
function maxRaises(arr) {
  let current = 0;
  // let right = 0;
  let sum = 0;
  let stack = [];
  // let min = 0;
  while (current < arr.length) {
    // 如果栈顶的元素小于墙的高度
    while (stack.length && arr[current] > arr[stack[stack.length - 1]]) {
      // var _stack$pop;
      // 栈顶出栈
      let tmp = arr[stack.pop()];//(_stack$pop = stack.pop()) !== null && _stack$pop !== void 0 ? _stack$pop : 0;
      // 如果取出来栈顶之和，栈空了，说明根本构不成两堵墙积水的情况
      if (!stack.length) break;
      // 然后取出栈顶
      let top = stack[stack.length - 1];
      // 计算哪个墙矮一点
      let min = Math.min(arr[top], arr[current]);
      // 计算能积水的两堵墙的距离
      let distance = current - top - 1;
      sum = sum + distance * (min - tmp);
    }
    stack.push(current);
    current++;
  }
  return sum;
}
console.log(maxRaises([0, 1, 0, 2, 1, 0, 1, 3, 2, 1, 2, 1]))
console.log(maxRaises([4, 2, 0, 3, 2, 5]))